其他
严选数据质量保障建设(二):数据指标产品的自动化测试提效
业务决策型数据产品通过数据可视化,为各层级管理者和业务同学提供数据洞察和分析工具,因此指标的质量是数据产品赖以生存的基石。通过严选指标测试平台,可以沉淀出指标测试及回归视角的核心指标集合,解决数据测试中,数据指标数量多、口径多,核对困难的痛点,为数据指标提供自动化测试和回归能力;同时提供数据监控报警的能力提高了线上问题的主动发现率。
1 前言
数据要有 -> 数据及时性:数据要按约定时间产出。 数据要全 -> 数据完整性:数据不能少、不能缺,当然也不能多。 数据要准 -> 数据准确性:数值要准确。 数据一样 -> 数据一致性:同一个数据,从不同模型查询出来,数据要是一样的。
2 数据指标质量保障之指标测试
2.1 什么是指标测试?
2.2 数据指标的特点及测试的痛点
数据指标多 从图中可以看到,数据指标数量多(指标+查询维度的组合结果很多)、出口多(相似指标,在不同系统或页面,可能来自不同的数据表和计算口径),目前全域数据产品的指标一共涵盖11个域(用户域、流量域、交易域等),原子指标个数有1307个。在实际的项目中,提测版本的测试周期几乎至少50%以上的时间都被用于指标的人工核对。
测试手段和效率,测试手段偏人工,指标的回归测试目前几乎没有开展 数据计算分多层,需要在多层均进行测试,测试工作量大
2.3 测试策略
目前数据质量保障的分工和测试策略如下图所示,从数仓层-->数据中台-->数据产品,数仓主要由数开保证质量,依靠code review、配置表的稽核规则、以及一些数据比对工具;数据中台主要依赖于统一查询服务进行接口测试保障;数据产品层,依赖QA的应用功能测试及人工核对指标。
指标的测试可以在模型、表、接口等维度进行测试,由于考虑到接口还涵盖了后端的处理逻辑,是与页面展示的指标完全能一一对应的,因此,指标的测试依赖于接口。我们希望有个系统能提供指标接口层的自动化测试能力,方便地进行指标测试,且可以自动化回归以前的用例。
2.4 指标测试平台
提供指标的对比测试以及指标运算测试,支持在模型层和服务层对指标提供测试能力; 提供版本迭代周期内数据指标的一键回归能力,具备上线前质量卡点的能力; 提供线上巡检能力(用例维度、指标维度); 将指标测试提前至接口和指标刚定义好的阶段与开发工作并行,测试可提前至接口和指标已定义好后,与开发工作并行,缩短测试周期及整个项目周期(TDD数据试点)。
2.4.1 平台架构图
2.4.2 系统层级图
Step 1. “定义”: 指标(包括用例、执行集),形成指标测试及回归视角的接口定义集合和指标定义集合。 Step 2. “编写用例”: 从全域数据产品为出发点,不区分应用,梳理不同应用中同个指标(同模型查询/不同模型查询)的对应关系,进行用例编写。 Step 3. “执行”: 通过指标测试平台获取各数据源(统一查询、数据产品的接口)获取指标数据,运行用例。 Step 4. “校验”: 用预制的规则对指标数据校验,包含固定阀值校验、历史波动校验、指标关系校验(A指标 = B指标/C指标)等。不同接口/模型间对比:用于测试相同指标在不同(接口或模型),是否存在数据不一致的问题。不同环境对比(线上和线下):用于底层重构、变更后的回归测试,来发现测试版本和线上稳定版本的数据不一致的问题。
2.4.3 平台具备的能力
可以检查不同应用间,相同口径指标的数据一致性,秒级响应,核对出指标之间的相对误差率,跟自定义的误差做校验,反馈出误差在不在可容忍范围内。 可以在不同终端、不同用户类型的组合下,对数据指标做运算,并帮你校验运算后的结果。 可以自定义测试角度的核心回归集合,一条执行集合,可包含若干条用例,一键执行,返回结果。 可以对执行集设置执行计划,定时执行,线上巡检。 可以在多环境下(test/online/regression)支持指标的重构场景测试。
2.4.4 平台适用的测试场景
数据指标比对 某天截了一张流水指标的对比图给数开,数据开发同学反馈说这个流水数据有问题,就算是不同模型的流水,数值差异也不会有0.1(其实我发的是实时的数据,浏览器切换tab的时间+刷新页面也超过两秒了,同一时刻的数据就没那么精准了)。通过指标测试平台,可以以极小的时间误差,去请求不同应用的接口,拿到指标数据,返回比对结果。 数据指标运算 在平台初期调研需求的阶段,V产品说,我每次核对指标,有一项是各BU财务毛利额之和要等于总的财务毛利额的数值。将近二十个BU数据,只能求助计算器,一不小心还容易看错行,将近二十个BU的数据,每次回归需要加和做运算比对的手工工作量很大。 再来看下,指标平台的一键执行回归后的结果图(11月25号财务毛利额离线数据): 线上环境和测试环境数据对比,应对模型重构的场景(online<---->test) 因为严选数仓这边没有测试环境,数据产品版本中经常有模型重构的场景,需要比对版本模型跟线上模型数据的一致性。用例可以区分online环境和test环境,进行重构场景的数据比对。 创建执行集,执行线上巡检 目前有两种巡检方式,一般离线数据很稳定,执行巡检的频率不用很高。只有单指标用例(指标监控)需要较高的频率去跑,以便发现500的接口,以及卡住不能及时产出的指标(一般展示为0或者null)。 指标执行集除了日常巡检外,经由严选质量平台编排和调度,用作日常版本迭代上线前的质量卡点。
2.4.5 落地效果和收益
2.4.6 线上问题捕捉
从以上数据,可以看出财务毛利额,在多次巡检中误差率越来越大(7%-->8.3%-->13.6%-->14.6%),经确认,该指标的实时模型和离线模型都有问题,针对主站新增需求省钱卡的数据未增加计算。
引发的思考:严选数据产品的数据来源于严选平台,数据开发流程要怎样跟严选业务链路的新增需求产生更及时的联动关系。
3 总结
大数据测试一直在探索自己的测试方式,数据测试并非完全不能借鉴传统业务测试的思路,指标测试平台的落地就是一个很好的例子,将传统业务测试的思路用于相对较新的数据测试领域,接口自动化的思路也可以借鉴用来做数据指标自动化,两者本质上是相通的。